package com.atguigu.jxc.service.impl;

import com.atguigu.jxc.dao.GoodsTypeDao;
import com.atguigu.jxc.entity.GoodsType;
import com.atguigu.jxc.entity.Menu;
import com.atguigu.jxc.service.GoodsTypeService;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author tongatong
 * @name GoodsTypeServiceImpl
 * @description
 * @date 2021/10/15
 * @time 11:28
 */
@Service
public class GoodsTypeServiceImpl implements GoodsTypeService {
    @Resource
    private GoodsTypeDao goodsTypeDao;

    @Override
    public String loadGoodsType() {
        return this.getAllGoodsType(-1).toString();
    }

    @Override
    public void save(String goodsTypeName, Integer pId) {
        GoodsType goodsType = new GoodsType();
        goodsType.setGoodsTypeName(goodsTypeName);
        goodsType.setPId(pId);
        goodsType.setGoodsTypeState(0);
        goodsTypeDao.insertGoodsType(goodsType);
    }

    @Override
    public void delete(Integer goodsTypeId) {
        goodsTypeDao.deleteGoodsTypeById(goodsTypeId);
    }

    private JsonArray getAllGoodsType(Integer parentId) {
        JsonArray array = this.getGoodsTypeByParentId(parentId);

        for(int i = 0;i < array.size();i++){

            JsonObject obj = (JsonObject) array.get(i);
            //如果是叶子节点，不再递归
            if(obj.get("state").getAsString().equals("open")){

                continue;

            }else{//如果是根节点，继续递归查询

                obj.add("children", this.getAllGoodsType(obj.get("id").getAsInt()));

            }

        }

        return array;
    }

    private JsonArray getGoodsTypeByParentId(Integer parentId) {

        JsonArray array = new JsonArray();

        List<GoodsType> goodsTypeList = goodsTypeDao.getMenuByParentId(parentId);

        //遍历菜单
        for(GoodsType goodsType : goodsTypeList){

            JsonObject obj = new JsonObject();

            //商品类别id
            obj.addProperty("id", goodsType.getGoodsTypeId());
            //商品类别名称
            obj.addProperty("text", goodsType.getGoodsTypeName());
            //图标
            obj.addProperty("iconCls", goodsType.getGoodsTypeIcon());

            if(goodsType.getGoodsTypeState() == 1) {
                // 根节点
                obj.addProperty("state", "closed");
            }else{
                // 叶子节点
                obj.addProperty("state", "open");
            }
            //扩展属性
            JsonObject attributes = new JsonObject();

            attributes.addProperty("state", goodsType.getGoodsTypeState());

            obj.add("attributes", attributes);

            array.add(obj);

        }

        return array;
    }
}
